/*
 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

package org.webrtc;

class NativeLibrary {
    private static String TAG = "NativeLibrary";

    static class DefaultLoader implements NativeLibraryLoader {
        @Override
        public boolean load(String name) {
            Logging.d(TAG, "Loading library: " + name);
            try {
                System.loadLibrary(name);
            } catch (UnsatisfiedLinkError e) {
                Logging.e(TAG, "Failed to load native library: " + name, e);
                return false;
            }
            return true;
        }
    }

    private static Object lock = new Object();
    private static boolean libraryLoaded;

    /**
     * Loads the native library. Clients should call PeerConnectionFactory.initialize. It will call
     * this method for them.
     */
    static void initialize(NativeLibraryLoader loader, String libraryName) {
        synchronized (lock) {
            if (libraryLoaded) {
                Logging.d(TAG, "Native library has already been loaded.");
                return;
            }
            Logging.d(TAG, "Loading native library: " + libraryName);
            libraryLoaded = loader.load(libraryName);
        }
    }

    /**
     * Returns true if the library has been loaded successfully.
     */
    static boolean isLoaded() {
        synchronized (lock) {
            return libraryLoaded;
        }
    }
}
